#ifndef CONFIG_H
#define CONFIG_H

#include "gd32f30x.h"

#define PCB_A1                      1
#define PCB_A2                      2
#define PCB_A3                      3

#define PCB_VER_LAST                PCB_A3

// PCB版本: 定义转到项目属性中
//#define PCB_VERSION                   PCB_A3

// 调试版本, 用于生产调试: 定义转到项目属性中
//#define PRODUCT_DEBUG

#if !defined(PCB_VERSION)
    #error "PCB_VERSION not defined"
#elif ((PCB_VERSION < PCB_A1) || (PCB_VERSION > PCB_VER_LAST))
    #error "PCB_VERSION error"
#endif

// 内部晶振
#define INTCLK                      120000000UL

// 通讯波特率
#define BAUDRATE                    115200

// UART1波特率
#define UART1_BAUDRATE              115200

// 使用UART1
#define _USES_UART1

#define MOVE_METHOD_SEQUENCE        0
#define MOVE_METHOD_INDEPENDENT     1
#define MOVE_METHOD_INTERP          2

// xy移动方法: 0 - 顺序运行; 1 - 单独运行; 2 - 插补运行.
#define MOVE_METHOD                 MOVE_METHOD_INDEPENDENT

// UART1通讯最大重试次数
#define UART1_MAX_RETRY_TIMES       5

// 注射器吸入的空气量, x0.01 ul
#define SYRINGE_AIR_VOLUME          1000    // 10ul

#ifdef _DEBUG
// 忽略所有Z, 用于单独调试XY
//#define IGNORE_Z
//#define IGNORE_PICKUP_ERROR
#endif

#if PCB_VERSION == PCB_A3
    #define X_MAX_SPEED             5000
    #define Y_MAX_SPEED             8000
#else
    #define X_MAX_SPEED             3800
    #define Y_MAX_SPEED             3800
#endif

// 自动定位时的速度, mm/sec
#define MEASURE_SPEED               3

// 自动定位测量高度时, X方向离边的距离, mm
#define MEASURE_OFFSET              0.5

// 等待Z加热的最长时间, 秒
#define MAX_HEAT_DURATION           10

// 抓杯/退杯相对位移, mm
#define PICKUP_CUP_OFFSET           6

// 抓杯时多走的相对位移, mm
#define PICKUP_CUP_EXTRA_OFFSET     0

// 抓杯/退杯时动作延迟时间, us
#define PICKUP_CUP_DELAY            300000UL

// XY运行区域中, 最大的禁止(障碍)区域数量
#define MAX_BLOCK_COUNT             1

// 允许定位时使用细分
#define ENABLE_MEASURE_MICROSTEP

// 允许使用另一个臂速度作为参考速度, 来调整当前臂最大速度
//#define ENABLE_REF_SPEED

// 电机脉冲输出使用50%占空比
// #define PULSE_DUTY_CYCLES_50

#define _USES_UART2
#endif // CONFIG_H
